package Day_0215.JVM;

/**
 * @author zxc
 * @date 2023/02/15 17:19
 **/
public class Heap_Memory {
    public static void main(String[] args) {
        /**
         * 谈一谈对于JVM中堆内存的理解
         * ===》
         * 1.以Hotspot为例，堆内存（HEAP）主要由GC模块进行分配和管理， 可分为以下部分：
         * （2）新生代(伊甸园区+幸存者区)
         * （2）老年代
         *
         * 2.参数设置JVM堆内存大小 ：
         * 在jvm参数中,使用-Xms，-Xmx等参数,就可以设置堆的大小和最大值，
         * 理解jvm的堆，还需要知道下面这个公式：
         * ===> 堆内内存 = 新生代+老年代
         *
         * 3.新生代和老年代所占内存比例大小
         * （1）一般来说，老年代占用堆内存大小的 2/3;
         * （2）同时，新生代占用堆内存大小的 1/3;（其中，伊甸园区占用新生代内存大小的 4/5;同时，幸存者区占用新生代内存大小的 1/5）
         *
         * 4.在使用堆内内存（on-heap memory）的时候，完全遵守JVM虚拟机的内存管理机制，采用垃圾回收器（GC）统一进行内存管理，
         * （1）GC会在某些特定的时间点进行一次彻底回收，也就是Full GC，GC会对所有分配的堆内内存进行扫描;
         * （2）在这个过程中,会对JAVA应用程序的性能造成一定影响，还可能会产生Stop The World。
         *
         * 5.常见的垃圾回收算法主要有：
         * （1）引用计数器法（Reference Counting）
         * （2）标记清除法（Mark-Sweep）
         * （3）复制算法（Coping）
         * （4）标记压缩法（Mark-Compact）
         * （5）分代算法（Generational Collecting）
         *  ===》 分代算法较为常用，一般是 年轻代是使用复制算法 && 老年代是使用标记清除算法;
         * （6）分区算法（Region）
         *
         */
    }
}
